package File;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

//文件操作使用字符流的Reader
public class Demo6 {
    public static void main(String[] args) throws IOException {
        //FileReader构造方法，可以传入相对路径，也可以传入绝对路径，也可以传入一个file对象
        //Reader对象创建完毕就会打开文件
//        Reader reader = new FileReader("./src/test.txt");
        //文件打开之后，就会在文件描述表中添加该文件的文件描述符，所以为了避免内存泄露，就需要在文件操作结束之后关闭文件
//        reader.close();
        //但是在文件关闭前可能出现异常或者return结束进程，从而关闭不了文件，所以可以使用try finally
//        try {
//            //这样不管try里面执行什么样的操作都会关闭文件
//        }finally {
//            reader.close();
//        }
        //以上代码太复杂了，下面是更加简洁优雅的写法:使用try with resource是更好的解决方案
        //这样的写法在try里面的操作执行结束之后就会自动进行文件的关闭
//        char[] buf = new char[1024];
//        try(Reader reader = new FileReader("./src/test.txt")){
////            char[] buf = new char[1024];
//            reader.read(buf);
//        }
//        for (int i = 0; i < buf.length; i++) {
//            if (buf[i] != 0){
//                System.out.print(buf[i] + ",");
//            }
//        }
        //有时候文件太大，需要进行多次读取
        try(Reader reader = new FileReader("./src/test.txt")){
            char[] buf = new char[1024];
            while (true){
                //循环实现文件的多次读取，因为可能文件很大，1024的数组一次装不下
                int n = reader.read(buf);
                if (n == -1){
                    break;
                }
                for (int i = 0; i < n; i++) {
                    System.out.print(buf[i] + ",");
                }
            }
        }
    }
}
